tFix for proper handling of the case where Drug[x].Cheap = Drug[x].Expensive = TRUE - vaccinewars - be a doctor and try to vaccinate the world
(HTM) git clone git://src.adamsgaard.dk/vaccinewars
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit a5f39227a993d419363e13659840972d65072b0d
(DIR) parent 12907924f0a34e20e73ab2747830b60c4439aacd
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Mon, 25 Feb 2002 18:21:35 +0000
Fix for proper handling of the case where
Drug[x].Cheap = Drug[x].Expensive = TRUE
Diffstat:
M src/serverside.c | 107 +++++++++++++++++--------------
M src/serverside.h | 1 -
2 files changed, 59 insertions(+), 49 deletions(-)
---
(DIR) diff --git a/src/serverside.c b/src/serverside.c
t@@ -3020,60 +3020,22 @@ int OfferObject(Player *To, gboolean ForceBitch)
return 0;
}
-/*
- * Sends details of drug prices to player "To". If "DisplayBusts"
- * is TRUE, also regenerates drug prices and sends details of
- * special events such as drug busts.
- */
-void SendDrugsHere(Player *To, gboolean DisplayBusts)
-{
- int i;
- gchar *Deal, *prstr;
- GString *text;
- gboolean First;
-
- Deal = g_malloc0(NumDrug);
- if (DisplayBusts)
- GenerateDrugsHere(To, Deal);
-
- text = g_string_new(NULL);
- First = TRUE;
- if (DisplayBusts)
- for (i = 0; i < NumDrug; i++)
- if (Deal[i]) {
- if (!First)
- g_string_append_c(text, '^');
- if (Drug[i].Expensive) {
- dpg_string_sprintfa(text, Deal[i] == 1 ? Drugs.ExpensiveStr1 :
- Drugs.ExpensiveStr2, Drug[i].Name);
- } else if (Drug[i].Cheap) {
- g_string_append(text, Drug[i].CheapStr);
- }
- First = FALSE;
- }
- if (!First)
- SendPrintMessage(NULL, C_NONE, To, text->str);
- g_string_truncate(text, 0);
- for (i = 0; i < NumDrug; i++) {
- g_string_sprintfa(text, "%s^",
- (prstr = pricetostr(To->Drugs[i].Price)));
- g_free(prstr);
- }
- SendServerMessage(NULL, C_NONE, C_DRUGHERE, To, text->str);
- g_string_free(text, TRUE);
-}
+/* Whether a particular drug is especially cheap or expensive */
+enum DealType {
+ DT_NORMAL, DT_CHEAP, DT_EXPENSIVE
+};
/*
* Generates drug prices and drug busts etc. for player "To"
- * "Deal" is an array of chars of size NumDrug.
+ * "Deal" is an array of size NumDrug.
*/
-void GenerateDrugsHere(Player *To, gchar *Deal)
+static void GenerateDrugsHere(Player *To, enum DealType *Deal)
{
int NumEvents, NumDrugs, NumRandom, i;
for (i = 0; i < NumDrug; i++) {
To->Drugs[i].Price = 0;
- Deal[i] = 0;
+ Deal[i] = DT_NORMAL;
}
NumEvents = 0;
if (brandom(0, 100) < 70)
t@@ -3085,16 +3047,16 @@ void GenerateDrugsHere(Player *To, gchar *Deal)
NumDrugs = 0;
while (NumEvents > 0) {
i = brandom(0, NumDrug);
- if (Deal[i] != 0)
+ if (Deal[i] != DT_NORMAL)
continue;
if (Drug[i].Expensive && (!Drug[i].Cheap || brandom(0, 100) < 50)) {
- Deal[i] = brandom(1, 3);
+ Deal[i] = DT_EXPENSIVE;
To->Drugs[i].Price = prandom(Drug[i].MinPrice, Drug[i].MaxPrice)
* Drugs.ExpensiveMultiply;
NumDrugs++;
NumEvents--;
} else if (Drug[i].Cheap) {
- Deal[i] = 1;
+ Deal[i] = DT_CHEAP;
To->Drugs[i].Price = prandom(Drug[i].MinPrice, Drug[i].MaxPrice)
/ Drugs.CheapDivide;
NumDrugs++;
t@@ -3117,6 +3079,55 @@ void GenerateDrugsHere(Player *To, gchar *Deal)
}
/*
+ * Sends details of drug prices to player "To". If "DisplayBusts"
+ * is TRUE, also regenerates drug prices and sends details of
+ * special events such as drug busts.
+ */
+void SendDrugsHere(Player *To, gboolean DisplayBusts)
+{
+ int i;
+ enum DealType *Deal = NULL;
+ gchar *prstr;
+ GString *text;
+ gboolean First;
+
+ Deal = g_new0(enum DealType, NumDrug);
+ if (DisplayBusts)
+ GenerateDrugsHere(To, Deal);
+
+ text = g_string_new(NULL);
+ First = TRUE;
+ if (DisplayBusts) {
+ for (i = 0; i < NumDrug; i++) {
+ if (Deal[i] != DT_NORMAL) {
+ if (!First)
+ g_string_append_c(text, '^');
+ if (Deal[i] == DT_CHEAP) {
+ g_string_append(text, Drug[i].CheapStr);
+ } else {
+ dpg_string_sprintfa(text, brandom(0, 100) < 50
+ ? Drugs.ExpensiveStr1 : Drugs.ExpensiveStr2,
+ Drug[i].Name);
+ }
+ First = FALSE;
+ }
+ }
+ }
+ g_free(Deal);
+
+ if (!First)
+ SendPrintMessage(NULL, C_NONE, To, text->str);
+ g_string_truncate(text, 0);
+ for (i = 0; i < NumDrug; i++) {
+ g_string_sprintfa(text, "%s^",
+ (prstr = pricetostr(To->Drugs[i].Price)));
+ g_free(prstr);
+ }
+ SendServerMessage(NULL, C_NONE, C_DRUGHERE, To, text->str);
+ g_string_free(text, TRUE);
+}
+
+/*
* Handles the incoming message in "answer" from player "From" and
* intended for player "To".
*/
(DIR) diff --git a/src/serverside.h b/src/serverside.h
t@@ -44,7 +44,6 @@ void FinishGame(Player *Play, char *Message);
void SendHighScores(Player *Play, gboolean EndGame, char *Message);
void SendEvent(Player *To);
void SendDrugsHere(Player *To, gboolean DisplayBusts);
-void GenerateDrugsHere(Player *To, char *Deal);
void BuyObject(Player *From, char *data);
int RandomOffer(Player *To);
void HandleAnswer(Player *From, Player *To, char *answer);